home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 10
/
AACD 10.iso
/
AACD
/
Magazine
/
Morphos
/
GCC
/
ppc-amigaos
/
include
/
powerup
/
ppclib
/
tasks.i
< prev
next >
Wrap
Text File
|
2000-02-28
|
13KB
|
533 lines
IFND POWERUP_PPCLIB_TASKS_I
POWERUP_PPCLIB_TASKS_I SET 1
;/**************************************************
; *
; *
; * PPCCreateTask() Tags
; *
; *
; **************************************************/
PPCTASKTAG_DUMMY =(TAG_USER+$20000)
;/* Program Counter Start of the Task; */
PPCTASKTAG_ELFOBJECT =(PPCTASKTAG_DUMMY+$1)
;/* Name of the new Task.; */
PPCTASKTAG_NAME =(PPCTASKTAG_DUMMY+$2)
;/* First Argument..gpr3; */
PPCTASKTAG_ARG1 =(PPCTASKTAG_DUMMY+$3)
;/* First Argument..gpr4; */
PPCTASKTAG_ARG2 =(PPCTASKTAG_DUMMY+$4)
;/* First Argument..gpr5; */
PPCTASKTAG_ARG3 =(PPCTASKTAG_DUMMY+$5)
;/* First Argument..gpr6; */
PPCTASKTAG_ARG4 =(PPCTASKTAG_DUMMY+$6)
;/* First Argument..gpr7; */
PPCTASKTAG_ARG5 =(PPCTASKTAG_DUMMY+$7)
;/* First Argument..gpr8; */
PPCTASKTAG_ARG6 =(PPCTASKTAG_DUMMY+$8)
;/* First Argument..gpr9; */
PPCTASKTAG_ARG7 =(PPCTASKTAG_DUMMY+$9)
;/* First Argument..gpr10; */
PPCTASKTAG_ARG8 =(PPCTASKTAG_DUMMY+$a)
;/* Default=TRUE means that the cacheflush is handled automaticly
; * You need cacheflushs when you use OS functions to share data.
; * If you know it better than the stupid cacheflush routine you
; * can handle that yourself and optimize your routines.
; */
PPCTASKTAG_CACHEFLUSH =(PPCTASKTAG_DUMMY+$b)
;/* Ptr to an ULONG Errorfield where a better error description
; * can be stored.
; */
PPCTASKTAG_ERROR =(PPCTASKTAG_DUMMY+$c)
;/* PPC Stacksize...Default 8192;
; * Supported by PowerUP's PPCGetTaskAttr() (V45)
; */
PPCTASKTAG_STACKSIZE =(PPCTASKTAG_DUMMY+$d)
;/* Task Priority..Default 0; */
PPCTASKTAG_PRIORITY =(PPCTASKTAG_DUMMY+$e)
;/* Input Handle..Default Open("Nil:")
; * The handle is closed when the PPC task completes
; */
PPCTASKTAG_INPUTHANDLE =(PPCTASKTAG_DUMMY+$f)
;/* Output Handle..Default Open("Nil:")
; * The handle is closed when the PPC task completes
; */
PPCTASKTAG_OUTPUTHANDLE =(PPCTASKTAG_DUMMY+$10)
;/* Error Handle..Default Open("Nil:")
; * The handle is closed when the PPC task completes
; */
PPCTASKTAG_ERRORHANDLE =(PPCTASKTAG_DUMMY+$11)
;/*
; * When you set this Tag the Task is stopped
; * before the first instruction is executed
; * Only useful for debuggers
; */
PPCTASKTAG_STOPTASK =(PPCTASKTAG_DUMMY+$12)
;/* ExceptionHook
; * The M68k Hook is called when a PPC TaskObject gets an
; * exception which can be processor or software(Kernel Msg)
; * related.
; * That`s the way the ppc.library calls the Hook:
; *
; * BOOL CallHookPkt(hook,TaskObject,ExceptionMsg);
; *
; * The Hook Function is NOT allowed to call PPCLibBase
; * functions to avoid deadlocks.
; * And after the Hook function returns the ExceptionMsg
; * contents IS NOT valid anymore.
; * So you should copy the ExceptionMsg contents to a private
; * buffer and then signal your debugger control task about
; * the event.
; * The Hook return BOOL should tell the ppc.library if all
; * worked fine.
; */
PPCTASKTAG_EXCEPTIONHOOK =(PPCTASKTAG_DUMMY+$13)
;/* If you want that the PPCPort gets a MsgPort you can tell
; * PPCCreateTask by a TRUE that you want one.
; * I made this optional because it may cause an initial speed
; * loss if you only need a ppc task for a quick run job where
; * the init latency may be a serious issue.
; * Supported by PowerUP's PPCGetTaskAttr()
; */
PPCTASKTAG_MSGPORT =(PPCTASKTAG_DUMMY+$14)
;/* If you wanna provide the ppc a startup msg. This msg will
; * be replied by the ppc.library after the PPC Task ends so
; * you can use this to abitrate your PPCUnloadObject()
; * Supported by PowerUP's PPCGetTaskAttr()
; */
PPCTASKTAG_STARTUP_MSG =(PPCTASKTAG_DUMMY+$15)
;/* The Data field for the PPCMessage
; * Supported by PowerUP's PPCGetTaskAttr()
; */
PPCTASKTAG_STARTUP_MSGDATA =(PPCTASKTAG_DUMMY+$16)
;/* The Length field for the PPCMessage
; * Supported by PowerUP's PPCGetTaskAttr()
; */
PPCTASKTAG_STARTUP_MSGLENGTH =(PPCTASKTAG_DUMMY+$17)
;/* The MsgID field for the PPCMessage
; * Supported by PowerUP's PPCGetTaskAttr()
; */
PPCTASKTAG_STARTUP_MSGID =(PPCTASKTAG_DUMMY+$18)
;/* The flag to activate the CTRL-C;D;E;F gateway to
; * the PPC Task by PPCSendSignal();
; */
PPCTASKTAG_BREAKSIGNAL =(PPCTASKTAG_DUMMY+$19)
;/* The CPU number the task should start on.
; * This is only a hint and no gurantee.
; */
PPCTASKTAG_CPUHINT =(PPCTASKTAG_DUMMY+$1a)
;/* Ptr to ixemul UserData
; * ONLY supported by PowerUP's PPCGetTaskAttr(),PPCSetTaskAttr()
; */
PPCTASKTAG_EXTUSERDATA =(PPCTASKTAG_DUMMY+$1b)
;/* Run Task Synchron Flag which means that the PPCCreateTask
; * doesn`t return until the task completes and the return
; * value is not the TaskObject but the Task`s return value.
; * To check if the task runned correctly check out the
; * PPCTASKTAG_ERROR fieldptr.
; * With this Tag you can do the same what the old RunTaskObject
; * does which interface is a bit limited(compatibility to the
; * first ppc.library version)
; */
PPCTASKTAG_WAITFINISH =(PPCTASKTAG_DUMMY+$31)
;/*
; * PPCTAGTAG_ERROR types
; */
ERROR_OK =0
ERROR_MEMORY =1
ERROR_NOPC =2
ERROR_CREATEMSGINTASK =3
ERROR_INPUTHANDLE =4
ERROR_OUTPUTHANDLE =5
ERROR_ERRORHANDLE =6
;/**************************************************
; *
; *
; * PPCGetTaskInfo() Tags
; *
; *
; **************************************************/
;/*
; * V45 adds the ti_Data data Set/Get passing if it`s possible
; */
PPCTASKINFOTAG_DUMMY =(TAG_USER+$21000)
PPCTASKINFOTAG_NAME =(PPCTASKINFOTAG_DUMMY+$1)
PPCTASKINFOTAG_PRIORITY =(PPCTASKINFOTAG_DUMMY+$2)
PPCTASKINFOTAG_CACHEFLUSH =(PPCTASKINFOTAG_DUMMY+$3)
PPCTASKINFOTAG_STACKSIZE =(PPCTASKINFOTAG_DUMMY+$4)
PPCTASKINFOTAG_STATE =(PPCTASKINFOTAG_DUMMY+$5)
PPCTASKINFOTAG_TASK =(PPCTASKINFOTAG_DUMMY+$6)
;/* This means the HOOK function is called for every Task; */
PPCTASKINFOTAG_ALLTASK =(PPCTASKINFOTAG_DUMMY+$7)
;/* Hook function which is called for a task so you can ask special fields
; * you may want to use.
; * Msg Parameter is NULL for now.
; * Object Parameter is the TaskObject
; *
; * HookFunc(Hook, TaskObject, NULL)
; */
PPCTASKINFOTAG_HOOK =(PPCTASKINFOTAG_DUMMY+$8)
PPCTASKINFOTAG_SIGALLOC =(PPCTASKINFOTAG_DUMMY+$9)
PPCTASKINFOTAG_SIGWAIT =(PPCTASKINFOTAG_DUMMY+$a)
PPCTASKINFOTAG_SIGRECVD =(PPCTASKINFOTAG_DUMMY+$b)
PPCTASKINFOTAG_USEDSTACKSIZE =(PPCTASKINFOTAG_DUMMY+$c)
PPCTASKINFOTAG_INPUTHANDLE =(PPCTASKINFOTAG_DUMMY+$d)
PPCTASKINFOTAG_OUTPUTHANDLE =(PPCTASKINFOTAG_DUMMY+$e)
PPCTASKINFOTAG_ERRORHANDLE =(PPCTASKINFOTAG_DUMMY+$f)
;/* Return the ElfObject of a Task
; * (Get)
; * (V45)
; */
PPCTASKINFOTAG_ELFOBJECT =(PPCTASKINFOTAG_DUMMY+$10)
;/* See equal PPCTASKTAG_EXCEPTIONHOOK
; * (V45)
; * (Set)
; */
PPCTASKINFOTAG_EXCEPTIONHOOK =(PPCTASKINFOTAG_DUMMY+$11)
;/* Tell the task to stop at the first instruction.
; * Only allowed to be used when you get a TaskHookMsg
; * with the MethodID PPCTASKHOOKMETHOD_CREATE.
; * It must not be called while a PPC Task runs.
; * (V45)
; * (Set)
; */
PPCTASKINFOTAG_STOPTASK =(PPCTASKINFOTAG_DUMMY+$12)
;/* See equal PPCTASKTAG_MSGPORT
; * (V45)
; */
PPCTASKINFOTAG_MSGPORT =(PPCTASKINFOTAG_DUMMY+$13)
;/* See equal PPCTASKTAG_STARTUP_MSG
; * (V45)
; */
PPCTASKINFOTAG_STARTUP_MSG =(PPCTASKINFOTAG_DUMMY+$14)
;/* See equal PPCTASKTAG_STARTUP_MSGDATA
; * (V45)
; */
PPCTASKINFOTAG_STARTUP_MSGDATA =(PPCTASKINFOTAG_DUMMY+$15)
;/* See equal PPCTASKTAG_STARTUP_MSGLENGTH
; * (V45)
; */
PPCTASKINFOTAG_STARTUP_MSGLENGTH =(PPCTASKINFOTAG_DUMMY+$16)
;/* See equal PPCTASKTAG_STARTUP_MSGID
; * (V45)
; */
PPCTASKINFOTAG_STARTUP_MSGID =(PPCTASKINFOTAG_DUMMY+$17)
;/*
; * All Register Tags only accept Ptrs at ti_Data so I don`t have to
; * change the API when there`s a 64Bit PPC some time.
; */
;/* SRR0=PC;
; * Get/Set through ti_Data or PPCTASKINFOTAG_VALUEPTR
; * (Get/Set)
; */
PPCTASKINFOTAG_PC =(PPCTASKINFOTAG_DUMMY+$20)
;/* SRR1=MSR;
; * Get/Set through ti_Data or PPCTASKINFOTAG_VALUEPTR
; * (Get/Set)
; */
PPCTASKINFOTAG_MSR =(PPCTASKINFOTAG_DUMMY+$21)
;/* 32bit value in function Result;
; * Get/Set through ti_Data
; * (Get/Set)
; */
PPCTASKINFOTAG_CR =(PPCTASKINFOTAG_DUMMY+$22)
;/* 32bit value in function Result;
; * Get/Set through ti_Data
; * (Get/Set)
; */
PPCTASKINFOTAG_XER =(PPCTASKINFOTAG_DUMMY+$23)
;/* Result by PPCTASKINFOTAG_VALUEPTR;
; * Get/Set through ti_Data or PPCTASKINFOTAG_VALUEPTR
; * (Get/Set)
; */
PPCTASKINFOTAG_LR =(PPCTASKINFOTAG_DUMMY+$24)
;/* Result by PPCTASKINFOTAG_VALUEPTR;
; * Get/Set through ti_Data or PPCTASKINFOTAG_VALUEPTR
; * (Get/Set)
; */
PPCTASKINFOTAG_CTR =(PPCTASKINFOTAG_DUMMY+$25)
;/* Result by PPCTASKINFOTAG_VALUEPTR;
; * Get/Set through ti_Data or PPCTASKINFOTAG_VALUEPTR
; * (Get/Set)
; */
PPCTASKINFOTAG_FPSCR =(PPCTASKINFOTAG_DUMMY+$26)
;/* ti_Data=Register Number
; * Get/Set through PPCTASKINFOTAG_VALUEPTR
; * (Get/Set)
; */
PPCTASKINFOTAG_GPR =(PPCTASKINFOTAG_DUMMY+$30)
;/* ti_Data=Register Number
; * Get/Set through PPCTASKINFOTAG_VALUEPTR
; * (Get/Set)
; */
PPCTASKINFOTAG_FPR =(PPCTASKINFOTAG_DUMMY+$31)
;/* Address where to read/write the register value from.
; * I use a ptr to be size indepent with the registers
; */
PPCTASKINFOTAG_VALUEPTR =(PPCTASKINFOTAG_DUMMY+$32)
;/* With PPCTASKINFOTAG_WAITFINISHTASK
; * it returns the parent process in which you created
; * a synchron PPC Task. Synchron PPC Task`s are created
; * with the PPCTASKTAG_WAITINFISH,TRUE or outdated a
; * PPCRunObject.
; * The reason for this function is to find the shell
; * task easily and check for a CTRL-C for example.
; * (Get)
; * (V45)
; */
PPCTASKINFOTAG_WAITFINISHTASK =(PPCTASKTAG_DUMMY+$33)
;/**************************************************
; *
; *
; * TaskObject ExceptionHook
; *
; *
; **************************************************/
STRUCTURE ExceptionMsg,0
ULONG Version;
ULONG Type;
STRUCT GPR,32*4;
STRUCT FPR,32*8;
STRUCT SR,16*4;
ULONG CR;
DOUBLE FPSCR;
ULONG XER;
ULONG LR;
ULONG CTR;
ULONG PVR;
ULONG IBAT0U;
ULONG IBAT0L;
ULONG IBAT1U;
ULONG IBAT1L;
ULONG IBAT2U;
ULONG IBAT2L;
ULONG IBAT3U;
ULONG IBAT3L;
ULONG DBAT0U;
ULONG DBAT0L;
ULONG DBAT1U;
ULONG DBAT1L;
ULONG DBAT2U;
ULONG DBAT2L;
ULONG DBAT3U;
ULONG DBAT3L;
ULONG SDR1;
ULONG ASR;
ULONG DAR;
ULONG DSISR;
ULONG SRR0;
ULONG SRR1;
ULONG SPRG0;
ULONG SPRG1;
ULONG SPRG2;
ULONG SPRG3;
ULONG TBL;
ULONG TBU;
ULONG DEC;
ULONG DABR;
;/* 603 special registers; */
ULONG DMISS;
ULONG DCMP;
ULONG HASH1;
ULONG HASH2;
ULONG IMISS;
ULONG ICMP;
ULONG RPA;
;/* 604e special registers; */
;/* Version 0 ends here; */
ULONG MSR;
;/* Version 1 ends here */
;/* Size depends on Version; */
;/* Current supported Version
; */
EXCEPTIONMSG_VERSION = 1
;/*
; * Current supported Types
; */
;/*
; * These are the processor exceptions
; */
EXCEPTION_UNKNOWN =0 ;/* Won`t happen; */
EXCEPTION_RESET =1 ;/* Won`t happen; */
EXCEPTION_MACHINECHECK =2 ;/* Won`t happen; */
EXCEPTION_DATAACCESS =3
EXCEPTION_INSTRUCTIONACCESS =4
EXCEPTION_EXTERNALINTERRUPT =5 ;/* Won`t happen; */
EXCEPTION_ALIGNMENT =6
EXCEPTION_PROGRAM =7
EXCEPTION_FPUUNAVAILABLE =8
EXCEPTION_DECREMENTER =9
EXCEPTION_INTERFACEERROR =10
EXCEPTION_RESERVED_B =11
EXCEPTION_SYSTEMCALL =12
EXCEPTION_TRACE =13
EXCEPTION_FPUASSIST =14
EXCEPTION_RESERVED_F =15
EXCEPTION_IMISS =16
EXCEPTION_DLOADMISS =17
EXCEPTION_DSTOREMISS =18
EXCEPTION_IADDRESSBREAK =19
EXCEPTION_SYSTEMMANAGEMENTINT =20
;/*
; * These are the kernel exceptions
; * to signal certain events
; */
EXCEPTION_MSG =$80000000
;/*
; * You receive this exception type
; * when the Kernel could stop a Task
; * successfully after a Stop or Trace
; * operation.
; * Look at PPCTASKTAG_STOPTASK for example
; */
EXCEPTION_STOPTASK =(EXCEPTION_MSG+$0)
;/*
; * You receive this exception type
; * when the task completes.
; * In this case the ONLY valid fields in the
; * ExceptionMsg are the Version field and the
; * the Message type.
; */
EXCEPTION_FINISHTASK =(EXCEPTION_MSG+$1)
;/**************************************************
; *
; *
; * PPCStartTask() Tags
; *
; *
; **************************************************/
PPCTASKSTARTTAG_DUMMY =(TAG_USER+$22000)
;/* Just run a Task again
; * ti_Data=BOOL
; */
PPCTASKSTARTTAG_RUN =(PPCTASKSTARTTAG_DUMMY+$0)
;/* Single Step the next instruction
; * ti_Data=BOOL
; */
PPCTASKSTARTTAG_TRACE =(PPCTASKSTARTTAG_DUMMY+$1)
;/* Branch until a Trace instruction
; * Processor dependent
; * ti_Data=BOOL
; * NOT SUPPORTED YET
; */
PPCTASKSTARTTAG_BRANCHTRACE =(PPCTASKSTARTTAG_DUMMY+$2)
;/* Run until Instruction hit
; * the Breakpoint Address
; * Processor dependent
; * ti_Data=BOOL
; * NOT SUPPORTED YET
; */
PPCTASKSTARTTAG_IBREAK =(PPCTASKSTARTTAG_DUMMY+$3)
;/* Run until DataAccess hit
; * the Breakpoint Address
; * Processor dependent
; * ti_Data=BOOL
; * NOT SUPPORTED YET
; */
PPCTASKSTARTTAG_DBREAK =(PPCTASKSTARTTAG_DUMMY+$4)
ENDC